import selection from './selection'
import {
  getObjType,
  chatatABC,
  numFormat,
  luckysheetContainerFocus,
} from '../utils/util'
import { hasPartMC, isEditMode } from '../global/validate'
import { getdatabyselection, getcellvalue } from '../global/getdata'
import tooltip from '../global/tooltip'
import editor from '../global/editor'
import locale from '../locale/locale'
import Store from '../store'

export function initialMatrixOperation() {
  const locale_drag = locale().drag

  //右键功能键
  //复制为json格式字符串，首行为标题
  $('#luckysheet-copy-json-head').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    //复制范围内包含部分合并单元格，提示
    if (Store.config['merge'] != null) {
      let has_PartMC = false

      for (let s = 0; s < Store.luckysheet_select_save.length; s++) {
        let r1 = Store.luckysheet_select_save[s].row[0],
          r2 = Store.luckysheet_select_save[s].row[1]
        let c1 = Store.luckysheet_select_save[s].column[0],
          c2 = Store.luckysheet_select_save[s].column[1]

        has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2)

        if (has_PartMC) {
          break
        }
      }

      if (has_PartMC) {
        if (isEditMode()) {
          alert(locale_drag.noPartMerge)
        } else {
          tooltip.info(locale_drag.noPartMerge, '')
        }
        return
      }
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    let arr = []
    if (getdata.length == 0) {
      return
    }

    if (getdata.length == 1) {
      let obj = {}
      for (let i = 0; i < getdata[0].length; i++) {
        obj[getcellvalue(0, i, getdata)] = ''
      }
      arr.push(obj)
    } else {
      for (let r = 1; r < getdata.length; r++) {
        let obj = {}
        for (let c = 0; c < getdata[0].length; c++) {
          if (getcellvalue(0, c, getdata) == undefined) {
            obj[''] = getcellvalue(r, c, getdata)
          } else {
            obj[getcellvalue(0, c, getdata)] = getcellvalue(r, c, getdata)
          }
        }
        arr.push(obj)
      }
    }

    selection.copybyformat(event, JSON.stringify(arr))
  })

  //复制为json格式字符串，无标题，采用ABCD作为标题
  $('#luckysheet-copy-json-nohead').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    //复制范围内包含部分合并单元格，提示
    if (Store.config['merge'] != null) {
      let has_PartMC = false

      for (let s = 0; s < Store.luckysheet_select_save.length; s++) {
        let r1 = Store.luckysheet_select_save[s].row[0],
          r2 = Store.luckysheet_select_save[s].row[1]
        let c1 = Store.luckysheet_select_save[s].column[0],
          c2 = Store.luckysheet_select_save[s].column[1]

        has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2)

        if (has_PartMC) {
          break
        }
      }

      if (has_PartMC) {
        if (isEditMode()) {
          alert(locale_drag.noPartMerge)
        } else {
          tooltip.info(locale_drag.noPartMerge, '')
        }
        return
      }
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    let arr = []
    if (getdata.length == 0) {
      return
    }
    let st = Store.luckysheet_select_save[0]['column'][0]
    for (let r = 0; r < getdata.length; r++) {
      let obj = {}
      for (let c = 0; c < getdata[0].length; c++) {
        obj[chatatABC(c + st)] = getcellvalue(r, c, getdata)
      }
      arr.push(obj)
    }

    selection.copybyformat(event, JSON.stringify(arr))
  })

  //复制为一维数组
  $('#luckysheet-copy-array1').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    //复制范围内包含部分合并单元格，提示
    if (Store.config['merge'] != null) {
      let has_PartMC = false

      for (let s = 0; s < Store.luckysheet_select_save.length; s++) {
        let r1 = Store.luckysheet_select_save[s].row[0],
          r2 = Store.luckysheet_select_save[s].row[1]
        let c1 = Store.luckysheet_select_save[s].column[0],
          c2 = Store.luckysheet_select_save[s].column[1]

        has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2)

        if (has_PartMC) {
          break
        }
      }

      if (has_PartMC) {
        if (isEditMode()) {
          alert(locale_drag.noPartMerge)
        } else {
          tooltip.info(locale_drag.noPartMerge, '')
        }
        return
      }
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    let arr = []
    if (getdata.length == 0) {
      return
    }
    for (let r = 0; r < getdata.length; r++) {
      for (let c = 0; c < getdata[0].length; c++) {
        arr.push(getcellvalue(r, c, getdata))
      }
    }

    selection.copybyformat(event, JSON.stringify(arr))
  })

  //复制为二维数组
  $('#luckysheet-copy-array2').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    //复制范围内包含部分合并单元格，提示
    if (Store.config['merge'] != null) {
      let has_PartMC = false

      for (let s = 0; s < Store.luckysheet_select_save.length; s++) {
        let r1 = Store.luckysheet_select_save[s].row[0],
          r2 = Store.luckysheet_select_save[s].row[1]
        let c1 = Store.luckysheet_select_save[s].column[0],
          c2 = Store.luckysheet_select_save[s].column[1]

        has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2)

        if (has_PartMC) {
          break
        }
      }

      if (has_PartMC) {
        if (isEditMode()) {
          alert(locale_drag.noPartMerge)
        } else {
          tooltip.info(locale_drag.noPartMerge, '')
        }
        return
      }
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    let arr = []
    if (getdata.length == 0) {
      return
    }
    for (let r = 0; r < getdata.length; r++) {
      let a = []
      for (let c = 0; c < getdata[0].length; c++) {
        a.push(getcellvalue(r, c, getdata))
      }
      arr.push(a)
    }

    selection.copybyformat(event, JSON.stringify(arr))
  })

  //复制为多维数组
  $('#luckysheet-copy-arraymore-confirm').click(function(event) {
    // Click input element, don't comfirm
    if (event.target.nodeName === 'INPUT') {
      return
    }

    $('body .luckysheet-cols-menu').hide()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    //复制范围内包含部分合并单元格，提示
    if (Store.config['merge'] != null) {
      let has_PartMC = false

      for (let s = 0; s < Store.luckysheet_select_save.length; s++) {
        let r1 = Store.luckysheet_select_save[s].row[0],
          r2 = Store.luckysheet_select_save[s].row[1]
        let c1 = Store.luckysheet_select_save[s].column[0],
          c2 = Store.luckysheet_select_save[s].column[1]

        has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2)

        if (has_PartMC) {
          break
        }
      }

      if (has_PartMC) {
        if (isEditMode()) {
          alert(locale_drag.noPartMerge)
        } else {
          tooltip.info(locale_drag.noPartMerge, '')
        }
        return
      }
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    let arr = []
    if (getdata.length == 0) {
      return
    }

    for (let r = 0; r < getdata.length; r++) {
      for (let c = 0; c < getdata[0].length; c++) {
        arr.push(getdata[r][c])
      }
    }

    let row = $('#luckysheet-copy-arraymore-row').val(),
      col = $('#luckysheet-copy-arraymore-col').val()

    if (row == '' && col == '') {
      selection.copybyformat(event, JSON.stringify(arr))
      $('body .luckysheet-cols-menu').hide()
      return
    }

    if (row == '') {
      row = 1
    } else {
      row = parseInt(row)
      if (row == null) {
        row = 1
      }
    }

    if (col == '') {
      col = 1
    } else {
      col = parseInt(col)
      if (col == null) {
        col = 1
      }
    }

    if (row.toString() == 'NaN' || col.toString() == 'NaN') {
      if (isEditMode()) {
        alert(locale_drag.inputCorrect)
      } else {
        tooltip.info(locale_drag.inputCorrect, '')
      }
      return
    }

    if (row < 1 || col < 1) {
      if (isEditMode()) {
        alert(locale_drag.notLessOne)
      } else {
        tooltip.info(locale_drag.notLessOne, '')
      }
      return
    }

    let arrlen = arr.length,
      i = 0,
      ret = []
    for (let r = 0; r < row; r++) {
      let a = []
      for (let c = 0; c < col; c++) {
        a.push(arr[i++])
        if (i >= arrlen) {
          selection.copybyformat(event, JSON.stringify(ret))
          $('body .luckysheet-cols-menu').hide()
          return
        }
      }
      ret.push(a)
    }

    selection.copybyformat(event, JSON.stringify(ret))
  })

  //复制为对角线
  $('#luckysheet-copy-diagonal').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    //复制范围内包含部分合并单元格，提示
    if (Store.config['merge'] != null) {
      let has_PartMC = false

      for (let s = 0; s < Store.luckysheet_select_save.length; s++) {
        let r1 = Store.luckysheet_select_save[s].row[0],
          r2 = Store.luckysheet_select_save[s].row[1]
        let c1 = Store.luckysheet_select_save[s].column[0],
          c2 = Store.luckysheet_select_save[s].column[1]

        has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2)

        if (has_PartMC) {
          break
        }
      }

      if (has_PartMC) {
        if (isEditMode()) {
          alert(locale_drag.noPartMerge)
        } else {
          tooltip.info(locale_drag.noPartMerge, '')
        }
        return
      }
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    let arr = []
    if (getdata.length == 0) {
      return
    }

    let clen = getdata[0].length
    for (let r = 0; r < getdata.length; r++) {
      if (r >= clen) {
        break
      }
      arr.push(getdata[r][r])
    }

    selection.copybyformat(event, JSON.stringify(arr))
  })

  //复制为反对角线
  $('#luckysheet-copy-antidiagonal').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    //复制范围内包含部分合并单元格，提示
    if (Store.config['merge'] != null) {
      let has_PartMC = false

      for (let s = 0; s < Store.luckysheet_select_save.length; s++) {
        let r1 = Store.luckysheet_select_save[s].row[0],
          r2 = Store.luckysheet_select_save[s].row[1]
        let c1 = Store.luckysheet_select_save[s].column[0],
          c2 = Store.luckysheet_select_save[s].column[1]

        has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2)

        if (has_PartMC) {
          break
        }
      }

      if (has_PartMC) {
        if (isEditMode()) {
          alert(locale_drag.noPartMerge)
        } else {
          tooltip.info(locale_drag.noPartMerge, '')
        }
        return
      }
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    let arr = []
    if (getdata.length == 0) {
      return
    }

    let clen = getdata[0].length
    for (let r = 0; r < getdata.length; r++) {
      if (r >= clen) {
        break
      }
      arr.push(getdata[r][clen - r - 1])
    }

    selection.copybyformat(event, JSON.stringify(arr))
  })

  //复制为对角偏移n列
  $('#luckysheet-copy-diagonaloffset').click(function(event) {
    // Click input element, don't comfirm
    if (event.target.nodeName === 'INPUT') {
      return
    }

    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    //复制范围内包含部分合并单元格，提示
    if (Store.config['merge'] != null) {
      let has_PartMC = false

      for (let s = 0; s < Store.luckysheet_select_save.length; s++) {
        let r1 = Store.luckysheet_select_save[s].row[0],
          r2 = Store.luckysheet_select_save[s].row[1]
        let c1 = Store.luckysheet_select_save[s].column[0],
          c2 = Store.luckysheet_select_save[s].column[1]

        has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2)

        if (has_PartMC) {
          break
        }
      }

      if (has_PartMC) {
        if (isEditMode()) {
          alert(locale_drag.noPartMerge)
        } else {
          tooltip.info(locale_drag.noPartMerge, '')
        }
        return
      }
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    let arr = []
    if (getdata.length == 0) {
      return
    }

    let clen = getdata[0].length,
      offset = parseInt($('#luckysheet-copy-diagonaloffset-value').val())

    if (offset.toString() == 'NaN') {
      if (isEditMode()) {
        alert(locale_drag.inputCorrect)
      } else {
        tooltip.info(locale_drag.inputCorrect, '')
      }
      return
    }

    if (offset < 0) {
      if (isEditMode()) {
        alert(locale_drag.offsetColumnLessZero)
      } else {
        tooltip.info(locale_drag.offsetColumnLessZero, '')
      }
      return
    }

    if (offset == null) {
      offset = 1
    }

    for (let r = 0; r < getdata.length; r++) {
      if (r + offset >= clen) {
        break
      }
      arr.push(getdata[r][r + offset])
    }

    selection.copybyformat(event, JSON.stringify(arr))
  })

  //复制为布尔值
  $('#luckysheet-copy-boolvalue').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    //复制范围内包含部分合并单元格，提示
    if (Store.config['merge'] != null) {
      let has_PartMC = false

      for (let s = 0; s < Store.luckysheet_select_save.length; s++) {
        let r1 = Store.luckysheet_select_save[s].row[0],
          r2 = Store.luckysheet_select_save[s].row[1]
        let c1 = Store.luckysheet_select_save[s].column[0],
          c2 = Store.luckysheet_select_save[s].column[1]

        has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2)

        if (has_PartMC) {
          break
        }
      }

      if (has_PartMC) {
        if (isEditMode()) {
          alert(locale_drag.noPartMerge)
        } else {
          tooltip.info(locale_drag.noPartMerge, '')
        }
        return
      }
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    let arr = []
    if (getdata.length == 0) {
      return
    }
    for (let r = 0; r < getdata.length; r++) {
      let a = []
      for (let c = 0; c < getdata[0].length; c++) {
        let bool = false

        let v
        if (getObjType(getdata[r][c]) == 'object') {
          v = getdata[r][c].v
        } else {
          v = getdata[r][c]
        }

        if (v == null || v == '') {
          bool = false
        } else {
          v = parseInt(v)
          if (v == null || v > 0) {
            bool = true
          } else {
            bool = false
          }
        }
        a.push(bool)
      }
      arr.push(a)
    }

    selection.copybyformat(event, JSON.stringify(arr))
  })

  //矩阵操作选区 翻转 上下
  $('#luckysheet-matrix-turn-up').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    if (getdata.length == 0) {
      return
    }

    let arr = []
    for (let r = getdata.length - 1; r >= 0; r--) {
      let a = []
      for (let c = 0; c < getdata[0].length; c++) {
        let value = ''
        if (getdata[r] != null && getdata[r][c] != null) {
          value = getdata[r][c]
        }
        a.push(value)
      }
      arr.push(a)
    }

    editor.controlHandler(arr)
  })

  //矩阵操作选区 翻转 左右
  $('#luckysheet-matrix-turn-left').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    if (getdata.length == 0) {
      return
    }

    let arr = []
    for (let r = 0; r < getdata.length; r++) {
      let a = []
      for (let c = getdata[0].length - 1; c >= 0; c--) {
        let value = ''
        if (getdata[r] != null && getdata[r][c] != null) {
          value = getdata[r][c]
        }
        a.push(value)
      }
      arr.push(a)
    }

    editor.controlHandler(arr)
  })

  //矩阵操作选区 翻转 顺时针
  $('#luckysheet-matrix-turn-cw').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    if (getdata.length == 0) {
      return
    }

    let arr = []
    for (let c = 0; c < getdata[0].length; c++) {
      let a = []
      for (let r = getdata.length - 1; r >= 0; r--) {
        let value = ''
        if (getdata[r] != null && getdata[r][c] != null) {
          value = getdata[r][c]
        }
        a.push(value)
      }
      arr.push(a)
    }

    editor.controlHandlerD(arr)
  })

  //矩阵操作选区 翻转 逆时针
  $('#luckysheet-matrix-turn-anticw').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    if (getdata.length == 0) {
      return
    }

    let arr = []
    for (let c = getdata[0].length - 1; c >= 0; c--) {
      let a = []
      for (let r = 0; r < getdata.length; r++) {
        let value = ''
        if (getdata[r] != null && getdata[r][c] != null) {
          value = getdata[r][c]
        }
        a.push(value)
      }
      arr.push(a)
    }

    editor.controlHandlerD(arr)
  })

  //矩阵操作选区 转置
  $('#luckysheet-matrix-turn-trans').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    if (getdata.length == 0) {
      return
    }

    let arr = []
    for (let c = 0; c < getdata[0].length; c++) {
      let a = []
      for (let r = 0; r < getdata.length; r++) {
        let value = ''
        if (getdata[r] != null && getdata[r][c] != null) {
          value = getdata[r][c]
        }
        a.push(value)
      }
      arr.push(a)
    }

    editor.controlHandlerD(arr)
  })

  let jfnqrt = function(x, p) {
    if (x == 0) return 0
    let x0, x1
    x0 = x
    x1 = ((p - 1) * x0) / p + x / (Math.pow(x0, p - 1) * p) //利用迭代法求解
    while (Math.abs(x1 - x0) > 0.000001) {
      x0 = x1
      x1 = ((p - 1) * x0) / p + x / (Math.pow(x0, p - 1) * p)
    }
    return x1
  }

  //矩阵操作选区 矩阵计算
  $('#luckysheet-matrix-cal-confirm').click(function(event) {
    // Click input element, don't comfirm
    if (
      event.target.nodeName === 'INPUT' ||
      event.target.nodeName === 'SELECT'
    ) {
      return
    }

    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    if (getdata.length == 0) {
      return
    }

    let caltype = $('#luckysheet-matrix-cal-type').val(),
      calvalue = parseInt($('#luckysheet-matrix-cal-value').val())

    if (calvalue.toString() == 'NaN') {
      if (isEditMode()) {
        alert(locale_drag.inputCorrect)
      } else {
        tooltip.info(locale_drag.inputCorrect, '')
      }
      return
    }

    if (calvalue == null) {
      calvalue = 2
    }

    let arr = []

    for (let r = 0; r < getdata.length; r++) {
      let a = []

      for (let c = 0; c < getdata[0].length; c++) {
        let value = ''
        if (getdata[r] != null && getdata[r][c] != null) {
          value = getdata[r][c]
          if (
            parseInt(value) != null &&
            getdata[r][c].ct != undefined &&
            getdata[r][c].ct.t == 'n'
          ) {
            if (caltype == 'minus') {
              value.v = value.v - calvalue
            } else if (caltype == 'multiply') {
              value.v = value.v * calvalue
            } else if (caltype == 'divided') {
              value.v = numFormat(value.v / calvalue, 4)
            } else if (caltype == 'power') {
              value.v = Math.pow(value.v, calvalue)
            } else if (caltype == 'root') {
              if (calvalue == 2) {
                value.v = numFormat(Math.sqrt(value.v), 4)
              } else if (calvalue == 3 && Math.cbrt) {
                value.v = numFormat(Math.cbrt(value.v), 4)
              } else {
                value.v = numFormat(jfnqrt(value.v, calvalue), 4)
              }
            } else if (caltype == 'log') {
              value.v = numFormat(
                (Math.log(value.v) * 10000) / Math.log(Math.abs(calvalue)),
                4
              )
            } else {
              value.v = value.v + calvalue
            }

            if (value.v == null) {
              value.m = ''
            } else {
              value.m = value.v.toString()
            }
          }
        }
        a.push(value)
      }
      arr.push(a)
    }

    editor.controlHandler(arr)
  })

  //矩阵操作选区 删除两端0值 按行
  $('#luckysheet-matrix-delezero-row').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    if (getdata.length == 0) {
      return
    }

    let arr = []
    let getdatalen = getdata[0].length
    for (let r = 0; r < getdata.length; r++) {
      let a = [],
        stdel = true,
        eddel = true
      for (let c = 0; c < getdatalen; c++) {
        let value = ''
        if (getdata[r] != null && getdata[r][c] != null) {
          value = getdata[r][c]
          if ((value.v == '0' || value.v == 0) && stdel) {
            continue
          } else {
            stdel = false
          }
        }
        a.push(value)
      }

      let a1 = []
      if (a.length == getdatalen) {
        a1 = a
      } else {
        for (let c = a.length - 1; c >= 0; c--) {
          let value = ''
          if (a[c] != null) {
            value = a[c]
            if ((value.v == '0' || value.v == 0) && eddel) {
              continue
            } else {
              eddel = false
            }
          }
          a1.unshift(value)
        }

        let l = getdatalen - a1.length
        for (let c1 = 0; c1 < l; c1++) {
          a1.push('')
        }
      }
      arr.push(a1)
    }

    editor.controlHandler(arr)
  })

  //矩阵操作选区 删除两端0值 按列
  $('#luckysheet-matrix-delezero-column').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    if (getdata.length == 0) {
      return
    }

    let arr = []
    let getdatalen = getdata.length,
      collen = getdata[0].length
    for (let c = 0; c < collen; c++) {
      let a = [],
        stdel = true,
        eddel = true
      for (let r = 0; r < getdatalen; r++) {
        let value = ''
        if (getdata[r] != null && getdata[r][c] != null) {
          value = getdata[r][c]
          if ((value.v == '0' || value.v == 0) && stdel) {
            continue
          } else {
            stdel = false
          }
        }
        a.push(value)
      }

      let a1 = []
      if (a.length == getdatalen) {
        a1 = a
      } else {
        for (let r = a.length - 1; r >= 0; r--) {
          let value = ''
          if (a[r] != null) {
            value = a[r]
            if ((value.v == '0' || value.v == 0) && eddel) {
              continue
            } else {
              eddel = false
            }
          }
          a1.unshift(value)
        }

        let l = getdatalen - a1.length
        for (let r1 = 0; r1 < l; r1++) {
          a1.push('')
        }
      }
      arr.push(a1)
    }

    let arr1 = []
    for (let c = 0; c < arr[0].length; c++) {
      let a = []
      for (let r = 0; r < arr.length; r++) {
        let value = ''
        if (arr[r] != null && arr[r][c] != null) {
          value = arr[r][c]
        }
        a.push(value)
      }
      arr1.push(a)
    }

    editor.controlHandler(arr1)
  })

  //矩阵操作选区 删除重复值 按行
  $('#luckysheet-matrix-delerpt-row').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    if (getdata.length == 0) {
      return
    }

    let arr = []
    let getdatalen = getdata[0].length
    for (let r = 0; r < getdata.length; r++) {
      let a = [],
        repeat = {}

      for (let c = 0; c < getdatalen; c++) {
        let value = null
        if (getdata[r] != null && getdata[r][c] != null) {
          value = getdata[r][c]

          if (value.v in repeat) {
            repeat[value.v].push(value)
          } else {
            repeat[value.v] = []
            repeat[value.v].push(value)
          }
        }
      }

      for (let c = 0; c < getdatalen; c++) {
        let value = null
        if (getdata[r] != null && getdata[r][c] != null) {
          value = getdata[r][c]

          if (repeat[value.v].length == 1) {
            a.push(value)
          }
        }
      }

      let l = getdatalen - a.length
      for (let c1 = 0; c1 < l; c1++) {
        a.push(null)
      }
      arr.push(a)
    }

    editor.controlHandler(arr)
  })

  //矩阵操作选区 删除重复值 按列
  $('#luckysheet-matrix-delerpt-column').click(function(event) {
    $('body .luckysheet-cols-menu').hide()
    luckysheetContainerFocus()

    if (Store.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti)
      } else {
        tooltip.info(locale_drag.noMulti, '')
      }
      return
    }

    let getdata = getdatabyselection(Store.luckysheet_select_save[0])
    if (getdata.length == 0) {
      return
    }

    let arr = []
    let getdatalen = getdata.length,
      collen = getdata[0].length
    for (let c = 0; c < collen; c++) {
      let a = [],
        repeat = {}

      for (let r = 0; r < getdatalen; r++) {
        let value = null
        if (getdata[r] != null && getdata[r][c] != null) {
          value = getdata[r][c]

          if (value.v in repeat) {
            repeat[value.v].push(value)
          } else {
            repeat[value.v] = []
            repeat[value.v].push(value)
          }
        }
      }

      for (let r = 0; r < getdatalen; r++) {
        let value = null
        if (getdata[r] != null && getdata[r][c] != null) {
          value = getdata[r][c]

          if (repeat[value.v].length == 1) {
            a.push(value)
          }
        }
      }

      a1 = a
      let l = getdatalen - a1.length
      for (let r1 = 0; r1 < l; r1++) {
        a1.push(null)
      }
      arr.push(a1)
    }

    let arr1 = []
    for (let c = 0; c < arr[0].length; c++) {
      let a = []
      for (let r = 0; r < arr.length; r++) {
        let value = null
        if (arr[r] != null && arr[r][c] != null) {
          value = arr[r][c]
        }
        a.push(value)
      }
      arr1.push(a)
    }

    editor.controlHandler(arr1)
  })
}
